package cn.iocoder.yudao.module.system.convert.tenant;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.tenant.vo.product.TenantProductRespVO;
import cn.iocoder.yudao.module.system.controller.admin.tenantrechargelog.vo.TenantRechargeLogRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantProductDO;
import cn.iocoder.yudao.module.system.dal.dataobject.tenantrechargelog.TenantRechargeLogDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 租户 Convert
 *
 * @author 芋道源码
 */
@Mapper
public interface TenantRechargeLogConvert {

    TenantRechargeLogConvert INSTANCE = Mappers.getMapper(TenantRechargeLogConvert.class);

    default TenantRechargeLogRespVO convert0(TenantRechargeLogDO productDO, Map<Long, AdminUserDO> userMap,  Map<Long, TenantDO> tenantMap) {
        TenantRechargeLogRespVO tenantOrderRespVO = BeanUtils.toBean(productDO, TenantRechargeLogRespVO.class);
        MapUtils.findAndThen(userMap, productDO.getOwnerUserId(), (user) -> tenantOrderRespVO.setOwnerUserName(user.getNickname()));
        MapUtils.findAndThen(tenantMap, productDO.getTenantId(), (user) -> tenantOrderRespVO.setTenantName(user.getName()));
        return tenantOrderRespVO;
    }

    default PageResult<TenantRechargeLogRespVO> convert(PageResult<TenantRechargeLogDO> result1, Map<Long, AdminUserDO> userMap, Map<Long, TenantDO> tenantMap) {
        List<TenantRechargeLogRespVO> orderRespVOS = result1.getList().stream().map(data -> convert0(data, userMap, tenantMap)).collect(Collectors.toList());
        PageResult<TenantRechargeLogRespVO> result2 = new PageResult<>();
        result2.setList(orderRespVOS);
        result2.setTotal(result1.getTotal());
        return result2;
    }

}
